/*
 * Merge.h
 *
 *  Created on: 23/10/2011
 *      Author: diego
 */

using namespace std;
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <sstream>
#include "Lista.h"
#include "Nodo.h"
#include "IteradorLista.h"
#include "ElementoInexistenteException.h"
#include "Registros.h"
#include "IndexWriter.h"
#include "IteradorIndice.h"

#ifndef MERGE_H_
#define MERGE_H_

#define FIN_ARCHIVO "__FIN_ARCHIVO__"

class Merge {
private:

	string toString(int i);
	int cantPasadas(int cant_indices, int vias);
	void renombrarIndiceFinal();
	bool quedanRegistros(IteradorIndice** entrada, int vias, bool* eof);
	string obtenerMenorTermino(super_reg** registros, string termino_anterior, int vias, bool* eof);
	super_reg* mergearRegistros(super_reg** registros, string termino, int vias,bool* eof);
	void leerRegistros(IteradorIndice** entradas, int vias, super_reg** registros, bool* eof, string termino);
	void renombrarIndice(string prefijo_old, string prefijo_new);
	void updateEOF(bool* eof, IteradorIndice** entradas, int vias, string termino, super_reg** registros);
	void borrar_registro(super_reg* reg);
	bool existeIndice();
	void renombrarIndiceExistente(int cant_indices);
public:
	Merge();
	void mergeIndices_Nvias(int cant_indices);
	string mergeIndices(Lista<string>* lista, int vias, int nro_pasada);
	virtual ~Merge();
};

#endif /* MERGE_H_ */
